Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / android_codec2.py

Displaying Raw • Download


meshchatx/android_codec2.py legacy/win7 (159b2358) Text, 2.42 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""Load Codec2 native libraries before pycodec2/LXST on Chaquopy Android."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787ctypes
Tff7b72import T7ee787logging
Tff7b72import T7ee787sys
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path

Te6edf3logger Tff7b72= Te6edf3loggingTff7b72.Td2a8ffgetLoggerTb4b4b4(Tff7b72__name__Tb4b4b4)

Te6edf3_codec2_preload_errorTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Te6edf3_codec2_preload_done Tff7b72= Tff7b72False


Tff7b72def Td2a8ff_is_chaquopy_androidTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787java T8b949e# noqa: F401
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True


Tff7b72def Td2a8ff_libcodec2_candidatesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Te6edf3PathTb4b4b4]Tb4b4b4:
Te6edf3candidatesTb4b4b4: Tffa657listTb4b4b4[Te6edf3PathTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3seenTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffaddTb4b4b4(Te6edf3pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3key Tff7b72= Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72if Te6edf3key Tff7b72in Te6edf3seenTb4b4b4:
Tff7b72return
Te6edf3seenTff7b72.Td2a8ffaddTb4b4b4(Te6edf3keyTb4b4b4)
Te6edf3candidatesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3pathTb4b4b4)

Tff7b72tryTb4b4b4:
Tff7b72import T7ee787pycodec2

Te6edf3addTb4b4b4(Te6edf3PathTb4b4b4(Te6edf3pycodec2Tff7b72.Td2a8ff__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparent Tff7b72/ Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass

Tff7b72for Te6edf3entry Tff7b72in Te6edf3sysTff7b72.Td2a8ffpathTb4b4b4:
Tff7b72if Tff7b72not Te6edf3entryTb4b4b4:
Tff7b72continue
Te6edf3addTb4b4b4(Te6edf3PathTb4b4b4(Te6edf3entryTb4b4b4) Tff7b72/ Ta5d6ff"Ta5d6ffchaquopyTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6fflibTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"Tb4b4b4)

Tff7b72return Te6edf3candidates


Tff7b72def Td2a8ffensure_codec2_native_libraryTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""Preload ``libcodec2.so`` so ``import pycodec2`` works on Android.

Chaquopy installs ``chaquopy-libcodec2`` separately from ``pycodec2``. The
extension module only declares a NEEDED entry for ``libcodec2.so``; without
preloading or bundling the shared library next to ``pycodec2.so``, imports
fail at runtime with ``dlopen`` errors.
"""
Tff7b72global Te6edf3_codec2_preload_doneTb4b4b4, Te6edf3_codec2_preload_error

Tff7b72if Te6edf3_codec2_preload_doneTb4b4b4:
Tff7b72return Te6edf3_codec2_preload_error Tff7b72is Tff7b72None

Te6edf3_codec2_preload_done Tff7b72= Tff7b72True

Tff7b72if Tff7b72not Te6edf3_is_chaquopy_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True

Tff7b72tryTb4b4b4:
Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4(Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72pass

Te6edf3last_errorTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72for Te6edf3lib_path Tff7b72in Te6edf3_libcodec2_candidatesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3lib_pathTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4(Tffa657strTb4b4b4(Te6edf3lib_pathTb4b4b4)Tb4b4b4)
Te6edf3loggerTff7b72.Td2a8ffinfoTb4b4b4(Ta5d6ff"Ta5d6ffLoaded Codec2 native library from Tffd700%sTa5d6ff"Tb4b4b4, Te6edf3lib_pathTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149OSError Tff7b72as Te6edf3excTb4b4b4:
Te6edf3last_error Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3lib_pathTffd700}Ta5d6ff: Tffd700{Te6edf3excTffd700}Ta5d6ff"

Te6edf3_codec2_preload_error Tff7b72= Te6edf3last_error Tff7b72or Ta5d6ff"Ta5d6fflibcodec2.so not found on AndroidTa5d6ff"
Te6edf3loggerTff7b72.Td2a8ffwarningTb4b4b4(Ta5d6ff"Ta5d6ffCodec2 native preload failed: Tffd700%sTa5d6ff"Tb4b4b4, Te6edf3_codec2_preload_errorTb4b4b4)
Tff7b72return Tff7b72False


Tff7b72def Td2a8ffcodec2_preload_errorTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
T8b949e"""Return the last preload failure message, if any."""
Tff7b72return Te6edf3_codec2_preload_error


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────